package com.itheima.demo3.Timer;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimerTask;

/*
  疑惑：      Duration duration = Duration.between(now, startTime);
             //磊哥视频是这样写的，我看他运行也是对的，但是我的运行结果是负数，真他妈奇怪
             解释：因为他这套课程的这个视频是2023.5.11录制的，startTime时间是"2023-06-07 09:00:00"
             而现在已经是2025年8月20日00:40:10了。。。。诶

 */
public class TimeTask extends TimerTask {
    // 高考开始时间
    private LocalDateTime startTime;

    // 无参构造器，对高考的开始时间进行初始化
    public TimeTask() {
        String s = "2023-06-07 09:00:00";
        // 补全代码
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        startTime = LocalDateTime.parse(s, dtf);

        System.out.println("\t\t\t2023年高考倒计时");
        System.out.println("2023年高考时间：2023年06月07日 星期三");
        System.out.println("现在距离2023年高考还有：");
    }


    // 计算当前时间与6月7号差多少天多少秒等，每一秒执行一次该方法。好处是，每一次执行后（也就是每一秒执行）拿到的时间都与6.7靠近一秒
    @Override
    public void run() {
        // 补全代码：完成倒计时效果
        // 1、拿到此刻当前时间。
        LocalDateTime now = LocalDateTime.now();

        // 2、计算此刻时间，与高考开始时间2023-06-07 09:00:00,相差的具体天数，小时，分，秒
        //Duration在day04的d4的test8讲过
        //Duration duration = Duration.between(now, startTime);   //磊哥视频是这样写的，我看他运行也是对的，但是我的运行结果是负数
        Duration duration = Duration.between(startTime, now);

        // 3、开始拿时间差信息
        //错误的写法，因为拿的是两个时间间隔的总时长，总分和总秒
/*
        System.out.println(duration.toDays() + "天 " + duration.toHours() + "时 "
           + duration.toMinutes() + "分 " + duration.toSeconds() + "秒");
*/

        /*以前课上没结果的toHoursPart等加part方法，源码：
        public int toHoursPart(){
        return (int) (toHours() % 24);      对24求余了
    }
         */
        System.out.println(duration.toDays() + "天 " + duration.toHoursPart() + "时 "
           + duration.toMinutesPart() + "分 " + duration.toSecondsPart() + "秒");
    }
}
